package sohsite.usuario;

import java.util.Collection;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import sohsite.excecao.EntradaInexistenteException;
import sohsite.excecao.ParametroInvalidoException;
import sohsite.util.Conexao;
import sohsite.util.generico.RepositorioGenerico;

public class RepositorioUsuarioHbm extends RepositorioGenerico<Usuario> implements IRepositorioUsuario {
	
	public RepositorioUsuarioHbm(){
		super(Usuario.class);
	}

	@SuppressWarnings("unchecked")
	public Collection<Usuario> consultarUsuarios(String nome, String cpf) throws EntradaInexistenteException {
		Collection<Usuario> usuarios = null;
		Session sessao = Conexao.encontrarSessao();
		Criteria consulta = sessao.createCriteria(Usuario.class);
		if(nome!=null)
			consulta.add(Restrictions.like("nome", nome + "%"));
		if(cpf!=null)
			consulta.add(Restrictions.like("cpf", cpf + "%"));
		usuarios = consulta.list();
		
		if(usuarios.isEmpty())
			throw new EntradaInexistenteException();
		
		return usuarios;
	}

	
	public Usuario consultarUsuarioPorLogin(String login)
			throws EntradaInexistenteException, ParametroInvalidoException {
		Session sessao = Conexao.encontrarSessao();
		Usuario usuario = null;
		Criteria consulta = sessao.createCriteria(Usuario.class);
		if(login!=null)
			consulta.add(Restrictions.eq("login", login));
		else
			throw new ParametroInvalidoException();
		
		
		if(consulta.uniqueResult()==null)
			throw new EntradaInexistenteException();
		else
			usuario = (Usuario)consulta.uniqueResult();
		
		return usuario;
	}
	
}
